#!/bin/bash

source "$(
  cd "$(dirname "$0")" || exit 1
  pwd
)/common.sh"

function install_development() {
  yum install patch openssl git -y
}

function download_sratools() {
  echo "# sratools正在下载"
  wget -t 40 -c "https://github.com/ncbi/sra-tools/archive/refs/tags/3.0.0.tar.gz" -O "$1"/3.0.0.tar.gz
  if [[ $? -eq 0 ]]; then
    echo -e "\033[1;32;1m# sratools已经下载成功\033[0m"
  else
    echo -e "\033[31m# sratools下载失败,请重新执行脚本\033[0m"
    exit 1
  fi
}

function install_sratools() {
  echo "# sratools正在安装"
  tar xf "$1"/3.0.0.tar.gz -C "$1" && rm -rf "$1"/3.0.0.tar.gz
  #ccsra.c.patch补丁修改是由于va_args在ARM平台上不能为标量，在x86平台中，va_list为指针，此指针可以为零，因此在x86平台下没有问题。
  #而在ARM中，va_list是一个真实结构名，因此不能是标量。参考官方给出的PR，但此PR并没有合并，作为一个临时的解决
  #方案：https://github.com/ncbi/sra-tools/pull/648，官方目前也在对此问题进行解决，后续可通过官网：https://github.com/ncbi/sra-tools了解该问题的解决方案。
  cp $(get_current_dir)/ccsra.c.patch "$1"/sra-tools-3.0.0/tools/copycat/
  #bmutil.h.patch补丁的修改，参考于鲲鹏代码迁移工具源码迁移分析的指导结果
  cp $(get_current_dir)/bmutil.h.patch "$1"/sra-tools-3.0.0/tools/sharq/bm/
  cd "$1"/sra-tools-3.0.0/tools/copycat/
  patch -p0 < ccsra.c.patch
  cd "$1"/sra-tools-3.0.0/tools/sharq/bm/
  patch -p0 < bmutil.h.patch
  cd "$1"/sra-tools-3.0.0
  sed -i "s/add_definitions(-msse4.2 -DBMSSE42OPT)/ /" tools/sharq/CMakeLists.txt
  sed -i "s/add_definitions(-msse4.2 -DBMSSE42OPT)/ /" test/sharq/CMakeLists.txt
  cd tools/driver-tool/secure/
  wget -t 40 -c "https://gitee.com/openeuler/AvxToNeon/blob/master/avx2neon.h"
  sed -i 's/#include <intrin.h>/#include <avx2neon.h>/' string.cpp
  cd "$1"/sra-tools-3.0.0
  ./configure --relative-build-out-dir --build-prefix="$2"/sra-tools-3.0.0 --prefix="$2"/sra-tools-3.0.0 --with-ncbi-vdb-prefix="$2"/ncbi-vdb-3.0.0
  make -j$(nproc) && make install
}

function write_sratools_module() {
  cat >"$1/sra-tools-3.0.0/sra-tools_modulefiles" <<EOF
#%Module1.0
conflict sra-tools
variable modfile [file normalize [info script]]
proc getModulefileDir {} {
    variable modfile
    set modfile_path [file dirname \$modfile]
    return \$modfile_path
}
set pwd [getModulefileDir]
set SRA_TOOLS \$pwd
setenv SRA_TOOLS \$SRA_TOOLS
prepend-path PATH \$SRA_TOOLS/sra-tools/linux/gcc/arm64/rel/bin 
EOF
}

function main() {
  set -e
  is_check_build_install_directory "$1" "$2" "sratoolkit-3.0.0.sh"
  is_check_build_equal "$1" "$2"
  install_development
  set +e
  download_sratools "$1"
  install_sratools "$1" "$2"
  set -e
  write_sratools_module "$2"
  rm -rf "$1"/sra-tools-3.0.0
  echo "# ------------------------------------------------------------------------"
}

main "$@"
